Micron Document
πŸŽ–οΈGitΠ―Ρ€Π°πŸŽ–οΈ


Displaying Raw β€’ Download

core/takserver/src/commonTest/kotlin/org/meshtastic/core/takserver/XmlUtilsTest.kt 65a1f5ce4d0e4b8eafcd0bbfccafd41dc6ee888a (65a1f5ce) Text, 3.56 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.core.takserver

Tff7b72import T7ee787kotlin.test.Test
Tff7b72import T7ee787kotlin.test.assertEquals

Tff7b72class T56d364XmlUtilsTest Tb4b4b4{

T8b949e// ── xmlEscaped ────────────────────────────────────────────────────────────

Tf0883e@Test
Tff7b72fun Td2a8ff`xmlEscaped leaves clean strings unchanged`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffHello WorldTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffHello WorldTa5d6ff"Tb4b4b4.Te6edf3xmlEscapedTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`xmlEscaped escapes ampersand`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffA&amp;BTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffA&BTa5d6ff"Tb4b4b4.Te6edf3xmlEscapedTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`xmlEscaped escapes less-than`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff&lt;tag&gt;Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff<tag>Ta5d6ff"Tb4b4b4.Te6edf3xmlEscapedTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`xmlEscaped escapes double quote`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffsay &quot;hi&quot;Ta5d6ff"Tb4b4b4, Ta5d6ff"""Ta5d6ffsay Ta5d6ff"Ta5d6ffhiTa5d6ff"""Ta5d6ff"Ta5d6ff.xmlEscaped())
}

@Test
fun `xmlEscaped escapes single quote`() {
assertEquals(Ta5d6ff"Tffa657itTff7b72&Te6edf3aposTb4b4b4;Te6edf3sTa5d6ff"Ta5d6ff, Ta5d6ff"Tffa657it'Te6edf3sTa5d6ff"Ta5d6ff.xmlEscaped())
}

@Test
fun `xmlEscaped escapes all special chars in one string`() {
assertEquals(Ta5d6ff"Tff7b72&Te6edf3ampTb4b4b4;Tff7b72&Te6edf3ltTb4b4b4;Tff7b72&Te6edf3gtTb4b4b4;Tff7b72&Te6edf3quotTb4b4b4;Tff7b72&Te6edf3aposTb4b4b4;Ta5d6ff"Ta5d6ff, Ta5d6ff"Tff7b72&Tff7b72<Tff7b72>\Ta5d6ff"Ta5d6ff'Ta5d6ff"Tb4b4b4.Te6edf3xmlEscapedTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`xmlEscaped escapes ampersand before other entities to avoid double-escaping`Tb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// "&amp;" in input should become "&amp;amp;" β€” not "&amp;" (which would be a double-escape bug)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff&amp;amp;Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff&amp;Ta5d6ff"Tb4b4b4.Te6edf3xmlEscapedTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}

T8b949e// ── geoChatSenderUid ──────────────────────────────────────────────────────

Tf0883e@Test
Tff7b72fun Td2a8ff`geoChatSenderUid extracts sender from GeoChat UID`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff!1234abcdTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffGeoChat.!1234abcd.All Chat Rooms.deadbeefTa5d6ff"Tb4b4b4.Te6edf3geoChatSenderUidTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`geoChatSenderUid returns original string for non-GeoChat UID`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff!1234abcdTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff!1234abcdTa5d6ff"Tb4b4b4.Te6edf3geoChatSenderUidTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`geoChatSenderUid handles missing second segment gracefully`Tb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// "GeoChat." splits into ["GeoChat", ""] β€” getOrElse(1) returns "" (empty second segment)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffGeoChat.Ta5d6ff"Tb4b4b4.Te6edf3geoChatSenderUidTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}

T8b949e// ── geoChatMessageId ──────────────────────────────────────────────────────

Tf0883e@Test
Tff7b72fun Td2a8ff`geoChatMessageId extracts messageId from GeoChat UID`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffdeadbeefTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffGeoChat.!1234abcd.All Chat Rooms.deadbeefTa5d6ff"Tb4b4b4.Te6edf3geoChatMessageIdTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`geoChatMessageId returns original string for non-GeoChat UID`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff!1234abcdTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff!1234abcdTa5d6ff"Tb4b4b4.Te6edf3geoChatMessageIdTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`geoChatMessageId handles single-segment GeoChat UID gracefully`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3uid Tff7b72= Ta5d6ff"Ta5d6ffGeoChatTa5d6ff"
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ffGeoChatTa5d6ff"Tb4b4b4, Te6edf3uidTb4b4b4.Te6edf3geoChatMessageIdTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.05s